package com.github.dynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 通用的动态代理处理器
 *
 * @author fatfish
 * @version 1.0
 * @date 2025/8/14 16:54
 */
public class GenneralProxyInvocationHandler implements InvocationHandler {

    // 被代理的对象，设置为Object类型
    private Object target;

    public void setTarget(Object target) {
        this.target = target;
    }

    public Object getProxy(){
        // 返回一个租房的代理对象
        return Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                this
        );
    }

    /**
     * 处理代理实例上的方法调用并返回结果。
     *
     * @param proxy  代理实例
     * @param method 被调用的方法
     * @param args   方法参数
     * @return 方法调用的结果
     * @throws Throwable 如果方法调用过程中发生错误
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        log(method.getName());
        Object result = method.invoke(target, args);
        return result;
    }

    public void log(String methodName){
        System.out.println("执行了 " + methodName + " 方法");
    }
}
